package com.util.test.resume;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;

/*
 * 下面这段程序你认为哪些可以优化（从程勋设计和代码规范等角度）
 * 程序设计:
 * 1、常量比较时，switch-case比if-else效率高
 *   或者也可以把其放到map中 例：
 *   map<"0","U0">; 
 *   if(map.containsKey(key)){
 *   	linked_list.addFirst(map.get(key));
 *   }
 * 2、Arrays.asList返回的是Arrays的内部类ArrayList extends AbstrackList 没有重写add(),会直接抛异常
 * 
 * 代码规范：
 * 1、Execute方法为execute
 * 2、linked_list变量为linkedList
 * 3、把"0"、"U0"等提出常量标示 例：
 *    private static final String F0 = "0"
 * 
 * 
 * 
 */
public class Demo {
	public void Execute(List<String> list, String type) {
		/*
		 * if ..else走逻辑判断时，每条if语句都独立需要加载，都要走一遍判断。这就是耗时的机制问题了。
           switch..case 根据一个值进行多路分支，只做一次计算，然后将表达式的值与每个case的值比较，进而选择哪一个case语句块。


           switch只能处理case为常量的情况，对不是常量的情况是无能为力的。例如 if (a > 1 && a < 100)属于关系逻辑，是无法使用switch…case来处理的。
           switch只能是在常量选择分支时比if..else效率高，但是if..else能应用于更多的场合，if..else比较灵活。
		 */
		LinkedList<String> linked_list = (LinkedList)list;
		try {
			if (type.equals("0")) {
				linked_list.addFirst("U0");
			} else if (type.equals("1")) {
				linked_list.addFirst("U1");
			} else if (type.equals("2")) {
				linked_list.addFirst("U2");
			} else if (type.equals("3")) {
				linked_list.addFirst("U3");
			} else if (type.equals("4")) {
				linked_list.addFirst("U4");
			}
		} catch (Exception e) {
			System.out.println("新增数据异常，{}" + e.getMessage());
		}

		/*
		 * Arrays.asList() 返回的市Arrays的内部类ArrayList， 而不是java.util.ArrayList。
		 * Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList，
		 * remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。
		 * java.util.ArrayList重新了这些方法而Arrays的内部类ArrayList没有重新，所以会抛出异常。解决方法如下：
		 * 
		 * 
		 * 改进：
		 * List arrayList1 = Arrays.asList("U5","U6","U7");
		   List arrList = new ArrayList(arrayList1);
		   arrList.add("U8");
		 */
		List arrayList = Arrays.asList("U5","U6","U7");
		arrayList.add("U8");
	}

	private static final String F0 = "0";
	private static final String F1 = "2";
	private static final String F2 = "2";
	private static final String F3 = "3";
	private static final String F4 = "4";

	private static final String U0 = "U0";
	private static final String U1 = "U1";
	private static final String U2 = "U2";
	private static final String U3 = "U3";
	private static final String U4 = "U4";

	static HashMap<Object, Object> FMap = new HashMap<>();
	static{
		FMap.put(F0, U0);
		FMap.put(F1, U1);
		FMap.put(F2, U2);
		FMap.put(F3, U3);
		FMap.put(F4, U4);
	}




	public void Execute1(List<String> list, String type) {
		LinkedList<String> linked_list = (LinkedList)list;

		try {
			if (FMap.containsKey(type)) {
				linked_list.addFirst((String) FMap.get(type));
			} 
		} catch (Exception e) {
			System.out.println("新增数据异常，{}" + e.getMessage());
		} finally {
			List arrayList = Arrays.asList("U5","U6","U7");
			arrayList.add("U8");
		}

		try {
			switch (type) {
			case "0":
				linked_list.addFirst("U0");
				break;
			case "1":
				linked_list.addFirst("U1");
				break;
			case "2":
				linked_list.addFirst("U2");
				break;
			case "3":
				linked_list.addFirst("U3");
				break;
			case "4":
				linked_list.addFirst("U4");
				break;

			default:
				break;
			}

			//			if (type.equals("0")) {
			//				linked_list.addFirst("U0");
			//			} else if (type.equals("1")) {
			//				linked_list.addFirst("U1");
			//			} else if (type.equals("2")) {
			//				linked_list.addFirst("U2");
			//			} else if (type.equals("3")) {
			//				linked_list.addFirst("U3");
			//			} else if (type.equals("4")) {
			//				linked_list.addFirst("U4");
			//			}
		} catch (Exception e) {
			System.out.println("新增数据异常，{}" + e.getMessage());
		}

		List arrayList = Arrays.asList("U5","U6","U7");
		arrayList.add("U8");
	}


	public static void main(String[] args) {
		//		List arrayList = Arrays.asList("U5","U6","U7");
		//		arrayList.add("U8");


		//改进
		List arrayList1 = Arrays.asList("U5","U6","U7");
		List arrList = new ArrayList(arrayList1);
		arrList.add("U8");

		//		String[] array = {"1","2","3","4","5"};
		//        List<String> list = Arrays.asList(array);
		//        List arrList = new ArrayList(list);
		//        arrList.add("6");
		System.out.println(arrList);

	}

}
